www.gusucode.com > 基于Visual C++高级界面特效制作百例源码程序 > 基于Visual C++高级界面特效制作百例源码程序/code/char04/htmldlg/DLGHTML.cpp
// DLGHTML.cpp: implementation of the CHtmlDialog class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include <mshtmhst.h> #include "DLGHTML.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CHtmlDialog::CHtmlDialog() { TRACE0("Warning: Initialization may not be done: Non Functional contructor"); } CHtmlDialog::~CHtmlDialog() { //Free the Mshtml.dll ::FreeLibrary(m_hInstMSHTML); } CHtmlDialog::CHtmlDialog(UINT nResID, CWnd* pParent/*= NULL*/) { m_hWndParent = pParent ? pParent->GetSafeHwnd() : NULL; CString strTemp; strTemp.Format("%d", nResID); ResourceToURL(strTemp); CommonConstruct(); } CHtmlDialog::CHtmlDialog(LPCTSTR lpszURL, BOOL bRes, CWnd* pParent/*= NULL*/) { m_hWndParent = pParent ? pParent->GetSafeHwnd() : NULL; if (bRes) { ResourceToURL(lpszURL); } else m_strURL = lpszURL; CommonConstruct(); } int CHtmlDialog::DoModal() { //First get the proc ShowHTMLDialog SHOWHTMLDIALOGFN *pfnShowHTMLDialog; pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(m_hInstMSHTML, TEXT("ShowHTMLDialog")); if (!pfnShowHTMLDialog) return -1; //Now create a URL Moniker IMoniker* pmk = NULL; BSTR bstrURL = m_strURL.AllocSysString(); CreateURLMoniker(NULL, bstrURL, &pmk); if (!pmk) return -1; TCHAR* pchOptions = m_strOptions.IsEmpty() ? NULL : m_strOptions.GetBuffer(0); //Now show the HTML Dialog HRESULT hr = (*pfnShowHTMLDialog)(m_hWndParent, pmk, m_varArgs, pchOptions, m_varReturn); if (FAILED(hr)) return -1; return 0; } void CHtmlDialog::CommonConstruct() { m_hInstMSHTML = ::LoadLibrary(TEXT("MSHTML.DLL")); } inline void CHtmlDialog::ResourceToURL(LPCTSTR lpszURL) { HINSTANCE hInstance = AfxGetResourceHandle(); ASSERT(hInstance != NULL); LPTSTR lpszModule = new TCHAR[_MAX_PATH]; if (GetModuleFileName(hInstance, lpszModule, _MAX_PATH)) { m_strURL.Format(_T("res://%s/%s"), lpszModule, lpszURL); } delete []lpszModule; } void CHtmlDialog::SetParam(VARIANT *pvarArgs) { m_varArgs = pvarArgs; } void CHtmlDialog::SetParam(LPCTSTR lpszArgs) { m_varArgs = lpszArgs; } CString CHtmlDialog::GetReturnString() { ASSERT(m_varReturn.vt == VT_BSTR); CString str = m_varReturn.bstrVal; return str; } LPCVARIANT CHtmlDialog::GetReturnVariant() { return (LPCVARIANT)m_varReturn; } void CHtmlDialog::SetSize(int x, int y) { m_strOptions.Format("dialogWidth: %d; dialogHeight: %d", x, y); } void CHtmlDialog::SetDlgOptions(LPCTSTR lpszOptions) { m_strOptions = lpszOptions; }